地球自然环境可视化分析

甘鹏程 王思雨 冯洋洋

2017-12-29

一、可视化工具包加载

#安装
if (!require(devtools)) library(devtools)
install_github("madlogos/recharts")
library(ggplot2)
library(ggalt)
library(gplots)
library(animation)
library(devtools)
library(dplyr)
library(showtext)  #使作图的字体更加丰富
library(RColorBrewer)  #增加调色板
library(maps)
library(mapdata)
library(maptools)
library(graphics)
library(REmap)
library(mice)
library(ggthemes)
library(plyr)
library(reshape2)
library(baidumap)
library(ggmap)
library(plotly)
library(scatterD3)
library(recharts)
showtext_auto(enable = T)
showtext_begin()

二、地球自然环境可视化——资源与能源

2.1 地球能源可视化分析

#数据预处理
#数据说明
energy <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Energy.csv",header = T,sep = ",",na.strings = '..')
str(energy)
## 'data.frame':    452 obs. of  4 variables:
##  $ country    : Factor w/ 226 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ total      : num  NA 2.7 22.2 NA NA 5.9 0.1 46.1 7.7 NA ...
##  $ per.capital: num  NA 813 856 NA NA ...
##  $ year       : int  1990 1990 1990 1990 1990 1990 1990 1990 1990 1990 ...

图2-1 1990年与2013年内各国家人均能源消耗量

#对比1990年与2013年内,全球各个国家的能源消耗人均量
#美国、俄罗斯有所减少,中国有明显增加
#大部分地区基本没有大变化
contry <- energy[-c(215:226,441:452),]
echartr(contry, country,per.capital, t = year,type="map_world", subtype='average') %>%
  setDataRange(splitNumber=0, 
               color=c('red','orange','yellow','limegreen','green')) %>%
  setTitle("Energy use of total by country, 1990-2013")%>% setTheme(height = 600)

图2-2 1990年与2013年内各国家能源消耗总量

#对比1990年和2013年内,全球各个国家的能源消耗总量
#中国增幅明显
echartr(contry, country, total, t = year,type="map_world", subtype='average') %>%
  setDataRange(splitNumber=0, 
               color=c('red','orange','yellow','limegreen','green')) %>%
  setTitle("Energy use of per.capita by country, 1990-2013")%>% setTheme(height = 600)

图2-3 1990年与2013年各大州能源消耗总量

#对比1990年和2013年,全球各个洲区的能源消耗总量
#总体均增长明显,特别亚太地区
#图型可切换折线图或者平铺柱状图
glo <- energy[c(215:222,441:448),]
echartr(glo, country, total, year, type='hbar', subtype='stack') %>%
  setTitle("Energy use of total by continents,1990-2013")%>% setTheme(width = 700)

图2-4 1990年与2013年各大洲能源消耗人均值

#对比1990年和2013年,全球各个洲区的能源消耗人均值
#北美增长巨大,远高于世界平均水平
#图型可切换折线图或者平铺柱状图
echartr(glo, country, per.capital, year, type='hbar', subtype='stack') %>%
  setTitle("Energy use of per.capita by continents,1990-2013")%>% setTheme(width = 700)

图2-5 1990年与2013年不同收入地区的能源总值

#对比1990年和2013年,不同收入地区的能源消耗总值
#低收入地区数据缺失
inco <- energy[c(223:226,449:452),]
echartr(inco, country, total, year, type='hbar', subtype='stack') %>%
  setTitle("Energy use of total by income,1990-2013")%>% setTheme(height = 300)

图2-6 1990年与2013年不同收入地区人均能源消耗

#对比1990年和2013年,不同收入地区的能源消耗人均值
#低收入地区数据缺失
#对比其他地区,高收入地区的人均消耗比总量消耗增长更明显
echartr(inco, country, per.capital, year, type='hbar', subtype='stack') %>%
  setTitle("Energy use of per.capita by income,1990-2013")%>% setTheme(height = 300)

2.2 淡水资源可视化分析

#数据预处理
#可再生的国内淡水资源流动指的是国内可再生资源(国内河流流量和雨水中的地下水)
freshwater <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Freshwater.csv",header = T,sep = ",",na.strings = '..')
str(freshwater)
## 'data.frame':    226 obs. of  5 variables:
##  $ name      : Factor w/ 226 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ flows     : num  47.2 26.9 11.3 NA 0.3 148 0.1 292 6.9 NA ...
##  $ per_capita: num  1439 9311 288 NA 3984 ...
##  $ annual    : num  20.3 1.3 8.4 NA NA 0.7 0 37.8 2.9 NA ...
##  $ per_flows : num  43 4.9 74.9 NA NA 0.5 22.1 12.9 42.9 NA ...

图2-7 各国家水资源状况交互图

# 2014年全球各个国家,内部可再生淡水资源的分布,为了可视化各个国家淡水总量和人均量的特点,将总量和人均量进行排位处理
#横轴表示淡水总量的排位,纵轴表示人均拥有淡水量的排位
#可以看到像Bahrain,United Arb Emirate等国家可再生水资源和人均资源均处于最少的状况
#而Dominica,Grenada,Sao Tome and Principe等国家可再生淡水的总量少但是人均在所有国家中位列前列
#Chnia,India,Nigeria等国家相反,有着丰富的淡水资源但是人均持有量缺排位十分靠后
#两个指标都比较靠前的国家有Canada,Peru,Colombia,Russia等
#整体的分布大概呈菱形,即总量和人均量的排名接近,但可以看出不少国家在左下角聚集,总量和人均都十分紧张
water = freshwater[1:214,]
water <- na.omit(water)
water$flows <- as.numeric(as.factor(water$flows))
water$per_capita <- as.numeric(as.factor(water$per_capita))
scatterD3(data = water, x = flows, y = per_capita, lab = name, labels_size = 10,point_size=40,point_opacity = 0.8,
          col_var = name, symbol_var = name,hover_size = 8,lasso = T,xlab = "Flows", ylab = "per capita",col_lab = "country")
## Warning in sample.int(length(x), size, replace, prob): '.Random.seed' is
## not an integer vector but of type 'NULL', so ignored

图2-8 各大洲的水资源保有状况交互图

#该图反应的2014世界不同大洲的水资源的保有和使用情况
#该散点图包含了三个指标的信息,横着代表可再生淡水资源总量,纵轴代表人均量,图中各个类别散点的颜色代表每年使用的水量占当年可总量的比率
#首先可以看到各大洲水资源的保有情况,Middle East & North Africa和South Asia的总量和人均量绝对值都比较低,特别是前者
#世界平均水平在右下角,总量高而人均低的情况,Latin America & Caribbean地区的总量和人均量均处于最高的位置,总量约占1/3,但人均远高于世界平均水平和其他地区
#Sub-Saharan Africa,North America,Europe & Central Asia,East Asia & Pacific的总量依次递增,最低的月4000 billion cu. m,最高约10000 billion cu. m,但人均差距显著,North America要远高于其他三个地区
#散点的颜色热度表示使用情况,世界平均水平是9.3%,只有三个地区超过了这个比率,East Asia & Pacific略高于世界平均水平,但是South Asia超过50%,Middle East & North Africa更是达到了138%远高于其当年可再生淡水总量
global <- freshwater[215:222,]
global$name <- factor(global$name,levels = c("World","East Asia & Pacific","Europe & Central Asia","Latin America & Caribbean","Middle East & North Africa","North America","South Asia", "Sub-Saharan Africa"))
echartr(data = global, x = ~flows, y = ~per_capita,series = ~name,weight = ~per_flows) %>% setDataRange(calculable=TRUE, splitNumber=0, labels=c('High','Low'),color=c('red', 'yellow', 'green'), valueRange=c(0, 100))

图2-9 各大洲淡水资源保有和使用状况交互图

#该图反应的是不同收入等级的地区,在淡水资源保有量和使用情况
#总共有四个类别,低收入地区、中的收入地区、中高收入地区、高收入地区
#横着代表2014可再生淡水总量,纵轴代表人均保有量,图型面积代表使用率
#中高收入地区位于右上角,高总量和人均量,使用率也属于中度
#中低收入地区和高收入地区有接近的总量,但是高收入地区的人均远高于前者,两者在人均保有量上处于两级分化状态。
#低收入地区在总量上和人均上均处于较低水平,但是使用度也是最低
#中低收入地区的使用度是最高的达到了18%,明显高于其他三类
income <- freshwater[223:226,]
income$name <- factor(income$name,levels = c("Low income","Lower middle income","Upper middle income","High income"))
echartR(data = income, x = ~flows, y = ~per_capita, weight = ~per_flows,series = ~name,type = 'bubble',palette='solarized_cyan',
      title = "Internal renewable freshwater resources of different income areas",
      subtitle = '(source: World Development Indicators)',
      xlab = 'Flows', ylab = 'per capita')

2.3 电力资源可视化分析

#数据预处理
#数据说明:发电量是在一个站的所有交流发电机组的终端测量的。除了水电、煤炭、石油、天然气和核能发电外,它还包括地热、太阳能、风能、潮汐能和波浪能,以及可再生的可再生能源和废物。生产包括发电厂的产出,这些发电厂只生产热电联产的热电厂。
electricity <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/electricity.csv",header = T,sep = ",",na.strings = "..")
str(electricity)
## 'data.frame':    227 obs. of  9 variables:
##  $ country               : Factor w/ 227 levels "","Afghanistan",..: 2 3 4 5 6 7 8 9 10 11 ...
##  $ Electricity.production: num  NA 4.7 64.2 NA NA ...
##  $ Coal                  : num  NA 0 0 NA NA 0 NA 2.9 0 NA ...
##  $ Natural.gas           : num  NA 0 97.8 NA NA 0 NA 47.7 42.4 NA ...
##  $ Oil                   : num  NA 0 1.8 NA NA 46.8 NA 13.8 0 NA ...
##  $ Hydropower            : num  NA 100 0.4 NA NA 53.2 NA 29 25.7 NA ...
##  $ Renewable.sources     : num  NA 0 0 NA NA 0 NA 2.5 0.1 NA ...
##  $ Nuclear.power         : num  NA 0 0 NA NA 0 NA 4.1 31.8 NA ...
##  $ Access.to.electricity : num  89.5 100 100 NA 100 32 96.4 100 100 94.5 ...
elec2 <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/elelc2.csv",header = T,sep = ",",na.strings = "..")
gelec <- elec2[1:48,]
ielec <- elec2[49:72,]

图2-10 2014年各国家电力生产总值

#2014年全球各个地区电力生产总值
#中国一枝独秀
celec <- electricity[1:214,]
echartr(celec, country, Electricity.production, type="map_world", subtype="move + scale") %>%
  setDataRange(splitNumber=0, color=getColFromPal('rainbow')) %>%
  setTitle("World Electricity production, 2014")

图2-11 2014年全球不同收入地区电力来源风玫瑰交互图

#2014年全球不同收入地区,电力生产来源风玫瑰图
#低收入地区数据缺失,包含中低收入、中高收入、高收入地区
#来源包括:煤(火力)、水利发电、天然气、核电、石油、可再生能源发电
#高收入地区煤电的比率要明显低于中高和中低收入地区,后两者的煤电比率均在50%左右
#水利和天然气发电是中低和中高收入地区的次来源,天然气和核电是高收入地区的次来源
echartr(ielec, Sources, of.total, facet=continent, type='rose', subtype='radius') %>%
  setTitle('Sources of electricity production by Continent') 

图2-12 2014年电力生产来源金字塔图

#2014年全球不同大陆版块电力生产来源金字塔图
#世界平均数据是第一个金字塔,形状偏紧瘦,煤电、天人气、水利、核电、可再生发电、石油依次递减,煤电依然是最主要的方式
#East Asia & Pacific和South Asia、Sub-Saharan Africa结构相近。煤电占比最重,其次是水利和天然气,其他来源不多,且后两者的石油发电更占比更多。
#Europe & Central Asia是所有金字塔中最饱满的,各个来源占比差距更小。占比最高的是天然气发电,其次是煤电、核电、水利等
#Latin America & Caribbean是位数不多不以煤电为主的地区,其占比最重的来源是水利,其次是天人气。特别是石油发电排在第三位
#Middle East & North Africa地区电力来源最为简单,主要以不可再生能源类为主,占比最重的是天然气发电,其次是石油发电
#North America的比例最接近标准三角形,来源分布均衡。占比最重的是煤电,第二和第三是天然气和核电。
echartr(gelec, Sources, of.total, facet=continent, type='funnel') %>% 
  setTitle('Sources of electricity production by income')

2.4 森林资源可视化分析

#数据预处理
defobio <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Deforest_and_biodiversity.csv",header = T,sep = ",",na.strings = "..")
str(defobio)
## 'data.frame':    214 obs. of  4 variables:
##  $ conutry           : Factor w/ 214 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ P1990.2000        : num  0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
##  $ P2000.2015        : num  0 -0.02 -1.44 0.19 0 0.21 0.13 1.07 0.02 0 ...
##  $ Threatened.species: int  38 57 86 22 4 128 36 196 98 28 ...
defobio$conutry <- as.character(defobio$conutry)
p3 <- defobio[,c(1,4)]
p3 <- na.omit(p3)
p3 <- p3[order(-p3$Threatened.species),]
rest <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Deforest.csv",header = T,sep = ",",na.strings = "..")
str(rest)
## 'data.frame':    428 obs. of  4 variables:
##  $ conutry                     : Factor w/ 214 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Average.annual.deforestation: num  0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
##  $ period                      : Factor w/ 2 levels "P1990-2000","P2000-2015": 1 1 1 1 1 1 1 1 1 1 ...
##  $ abs                         : num  0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
rest$abs <- abs(rest$abs)
rest <- na.omit(rest)
rest <- rest[order(-rest$abs),]

图2-13 自然森林增减移动率交互图

#平均年自然森林增减移动率(变动绝对额最高的前100个国家)
#左侧表示减少,右侧表示增加
#两个系列分别是1990-2000和2000-2015两个时间段内的增减移动率
#更多的国家都出现了更快的森林减少速率
#在1990-2000和2000-2015期间,French Polynesia森林年流失率均最高,2000-2015期间Togo森林年增加率最高
echartr(rest[c(1:100),], conutry, Average.annual.deforestation, period, type='hbar', subtype='stack') %>%
  setTitle("forest change in 1990-2000 and 2000-2015(top 100)") %>%
  setYAxis(axisLine=list(onZero=TRUE)) %>%
  setXAxis(axisLabel=list(
    formatter=JS('function (value) {return Math.abs(value);}')
  ))%>% setTheme(height = 1500)

图2-14 受威胁物种前20国家国家分布图

##2016受威胁物种总数最多的20个国家
#统计数据包括Mammal , Bird ,  Fish,Plant species (higher)四个类别的种类数
#最多的国家是Ecuador,数量是2058种,远高于第二名Malaysia的927
echartr(p3[1:20,], conutry, Threatened.species) %>%
  setTitle('Threatened species in 2016 (top 20)')%>% setTheme(theme = 'red')

三、地球自然环境可视化分析——大气与森林污染

3.1 大气污染可视化分析

图3-1 不同收入类别国家CO2排放强度图

#数据预处理
#数据说明
setwd("D:/bigdatahw/可视化/团队作业-王思雨/数据/")   #设置工作路径
CO2index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/co2信息检索.csv",header=T,sep=',')                                            #导入CO2强度数据
CO2data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/co2排放量.csv",header=T,sep=',',skip=4)                                        #导入CO2强度数据索引
colnames(CO2index)[1] <- 'country' 
any(is.na(CO2index))                                 #查看缺失值
## [1] FALSE
md.pattern(CO2index)                                 #生成缺失报告
##      country Region IncomeGroup SpecialNotes TableName  
## [1,]       1      1           1            1         1 0
## [2,]       0      0           0            0         0 0
CO2index<-na.omit(CO2index)                          
CO2index$Region<-as.factor(CO2index$Region)          #转化为因子变量
a<-CO2index$Region[6]                                #数据中有一些空格进行删除
b<-CO2index$IncomeGroup[6]
CO2index$Region[CO2index$Region==a]=NA
CO2index$IncomeGroup[CO2index$IncomeGroup==b]=NA
CO2data<-CO2data[,c(-3,-4)]                          #选取数据分析中所需要的变量
CO2index<-CO2index[,c(-4,-5)]
colnames(CO2data)[2] <- 'country'                    #更换变量名
CO2<-merge(x = CO2index, y = CO2data, by = "country", all = TRUE)    
#进行CO2索引表与数据表的链接
CO2<-CO2[,c(-5:-15,-60:-63)]                    #删除不需要的变量以及缺失值较多的列

#填补部分国家所在大洲的缺失值
for(i in 1:length(CO2$Region)){
  if (is.na(CO2$Region[i])){
    CO2$Region[i]=CO2$Region[i-1]
  }
}
#填补部分国家所属的收入类别
for(i in 1:length(CO2$IncomeGroup)){
  if (is.na(CO2$IncomeGroup[i])){
    CO2$IncomeGroup[i]=CO2$IncomeGroup[i-1]
  }
}
CO2<-na.omit(CO2)

#将CO2数据进行tidy data的清洗与整理
#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(CO2) <- gsub("X", "", names(CO2)) 

CO2_tidy <- 
  CO2 %>%                                 
  melt(id = c("country", "Region","IncomeGroup","Country.Name"),
       variable.name = "year", 
       value.name = "cases",
       na.rm = TRUE)            #控制两列变量在新表中不动新生成的变量case记录CO2强度
head(CO2_tidy,15)               #查看整理过的tidy数据的前15行
##    country                     Region         IncomeGroup
## 1      AGO         Sub-Saharan Africa Lower middle income
## 2      ALB      Europe & Central Asia Upper middle income
## 3      ARB      Europe & Central Asia         High income
## 4      ARE Middle East & North Africa         High income
## 5      ARG  Latin America & Caribbean Upper middle income
## 6      AUS        East Asia & Pacific         High income
## 7      AUT      Europe & Central Asia         High income
## 8      BEL      Europe & Central Asia         High income
## 9      BEN         Sub-Saharan Africa          Low income
## 10     BGR      Europe & Central Asia Upper middle income
## 11     BHR Middle East & North Africa         High income
## 12     BOL  Latin America & Caribbean Lower middle income
## 13     BRA  Latin America & Caribbean Upper middle income
## 14     BRN        East Asia & Pacific         High income
## 15     CAN              North America         High income
##            Country.Name year      cases
## 1                Angola 1971  0.8856227
## 2               Albania 1971  2.5338709
## 3            Arab World 1971  4.9140908
## 4  United Arab Emirates 1971 20.9338897
## 5             Argentina 1971  2.6432197
## 6             Australia 1971  2.9599533
## 7               Austria 1971  2.7720127
## 8               Belgium 1971  3.0642834
## 9                 Benin 1971  0.2654894
## 10             Bulgaria 1971  3.3798162
## 11              Bahrain 1971  2.1577723
## 12              Bolivia 1971  3.0000363
## 13               Brazil 1971  1.4707992
## 14    Brunei Darussalam 1971 42.4088481
## 15               Canada 1971  2.4945258
CO2_line<-
        CO2_tidy[,c(3,5,6)] %>%
        dplyr::group_by(IncomeGroup,year) %>%
        dplyr::summarise(cases = mean(cases)) 
#进行以收入分类和年份的分组求均值变量cases记录每个收入分组每一年的CO2的平均强度
#利用ggplot进行绘图
ggplot(CO2_line, aes(x=year, y=cases,    colour=IncomeGroup,group=IncomeGroup,shape=IncomeGroup)) +    
  geom_line(size=1)+geom_point(size=2)+
  xlab("年份") + ylab("平均CO2强度")+
  ggtitle('四种不同收入国家的CO2强度图')+
  theme(plot.title = element_text(hjust =0.5,family="myFont",size=20,color="red"),  panel.background=element_rect(fill='aliceblue',color='black'))

#设置字体大小为20,红色,且标题居中,背景设置为Aliceblue浅色,边缘线为black

图3-2 不同收入类别国家CO2排放总量面积堆积图

CO2_em_index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/CO2排放索引.csv",header=T,sep=',')
CO2_em_data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/CO2排量.csv",header=T,sep=',',skip=4)
colnames(CO2_em_index)[1] <- 'country'
any(is.na(CO2_em_index)) 
## [1] FALSE
md.pattern(CO2_em_index)#生成缺失报告
##      country Region IncomeGroup SpecialNotes TableName  
## [1,]       1      1           1            1         1 0
## [2,]       0      0           0            0         0 0
a<-CO2_em_index$Region[6]                 #删除数据中所含有的空格项
b<-CO2_em_index$IncomeGroup[6]
CO2_em_index$Region[CO2_em_index$Region==a]=NA
CO2_em_index$IncomeGroup[CO2_em_index$IncomeGroup==b]=NA
CO2_em_data<-CO2_em_data[,c(-3,-4)]       #保留可视化所需变量与指标
CO2_em_index<-CO2_em_index[,c(-4,-5)]     
colnames(CO2_em_data)[2] <- 'country'     #更改变量保证可以进行合并
CO2_em<-merge(x = CO2_em_index, y = CO2_em_data, by = "country", all = TRUE) 
#根据键值country进行表连接
CO2_em<-CO2_em[,c(-60:-63)]
CO2_em<-na.omit(CO2_em)

#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(CO2_em) <- gsub("X", "", names(CO2_em))  
CO2_em_tidy <- 
  CO2_em %>%                        #利用管道操作符
  melt(id = c("country", "Region","IncomeGroup","Country.Name"),     
       variable.name = "year", 
       value.name = "cases",
       na.rm = TRUE)                #控制两列变量在新表中不动新生成的变量用case标识
CO2_em_area<-
  CO2_em_tidy[,c(3,5,6)] %>%
  group_by(IncomeGroup,year) %>%
  summarise(cases = sum(cases)/1000000) #计算CO2排放总和,并重新设置量纲
CO2_em_area$IncomeGroup = factor(CO2_em_area$IncomeGroup, levels=c('Low income','Lower middle income','High income','Upper middle income'))    # 设置面积堆叠顺序
ggplot(CO2_em_area,aes(x=year,y=cases,group=IncomeGroup,fill=IncomeGroup))+
  geom_area(alpha=0.65)+
  xlab("年份") + ylab("平均CO2强度")+
  ggtitle('四种不同收入类型的CO2排放图')+
  theme(plot.title = element_text(hjust =0.5,family="myFont",size=20,color="red"), panel.background=element_rect(fill='aliceblue',color='black'))  

#设置背景色为Aliceblue,线条颜色为black

图3-3 2014年世界各国CO2气体排放总量交互式地图

world <- map_data("world")                    #载入map数据集中地world数据
world <- world[world$region != "Antarctica",] # 剔除南极洲
names(CO2_em_data) <- gsub("X", "", names(CO2_em_data)) 
CO2_map<-CO2_em_data[,c(1,57)]                #CO2气体排放数据中挑选出键值和2014年数据
colnames(CO2_map) <-c('country','emission')   #变量重命名
colnames(world)[5] <- 'country'
world<-world[,-6]
CO2_map<-join(world,CO2_map,type="full",by="country")         #进行表间全连接
#填补world和CO2_map两张表中名字之间不同而无法识别的国家数据
CO2_map$emission[CO2_map$country=='Russia']=1705345.684   
CO2_map$emission[CO2_map$country=='UK']=419820.162
CO2_map$emission[CO2_map$country=='USA']=5254279.285  
CO2_map$emission[CO2_map$country=='Yemen']=22698.730
CO2_map$emission[CO2_map$country=='Democratic Republic of the Congo']=4671.758
CO2_map$emission[CO2_map$country=='Egypt']=201894.019
CO2_map$emission[CO2_map$country=='South Korea']=587156.373
CO2_map$emission[CO2_map$country=='North Korea']=40527.684
CO2_map$emission[CO2_map$country=='Taiwan']=546273.873
CO2_map$emission[CO2_map$country=='Vietnam']=46273.873
CO2_map$emission[CO2_map$country=='Venezuela']=185220.170
CO2_map$emission[CO2_map$country=='Virgin Islands']=179.683
CO2_map$emission[CO2_map$country=='Republic of Congo']=3094.948
CO2_map$emission[CO2_map$country=='Ivory Coast']=11045.004
CO2_map<-na.omit(CO2_map)
CO2_map$emission<-as.numeric(as.character(CO2_map$emission))
serious<-get_geo_position(c('中国','美国'))         #标记出CO2气体排放量最高的两个国家
serious[2,2]=40.49937
#设置标题模板
theme_opts <- list(theme(panel.grid.minor = element_blank(),#设置网格线为空
                         panel.grid.major = element_blank(),
                         panel.background = element_rect(fill="slategray1"),
                         #设置图版背景色
                         plot.background = element_rect(fill="papayawhip"),
                         #设置绘图区背景色
                         panel.border = element_blank(),
                         legend.background = element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),  #设置图例背景色
                         axis.line = element_blank(),
                         axis.text.x = element_blank(),
                         axis.text.y = element_blank(),
                         axis.ticks = element_blank(),
                         axis.title.x = element_blank(),
                         axis.title.y = element_blank(),#以上全是设置xy轴
                         plot.title = element_text(size=20,hjust = 0.5,family="myFont",color="navyblue")))  #设置标题字体颜色

p<-ggplot ()+
  geom_polygon(data=CO2_map,aes(x=long,y=lat,group=group,fill=emission),colour="gray40")+scale_fill_gradient(name="世界CO2排放总量",low="white",high="red")+
  geom_text(data =serious,aes(x=lon,y=lat,label=city),colour="black",size=5,vjust=0,nudge_y=0.5)+labs(title ="2014年度世界CO2排放总量")+theme_opts   #加入标题模板
ggplotly(p)             #绘制交互式地图

图3-4 各大洲甲烷排放量年份动图gif

Meth_em_index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/甲烷检索.csv",header=T,sep=',')
Meth_em_data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/甲烷排放.csv",header=T,sep=',',skip=4)
colnames(Meth_em_index)[1] <- 'country'
any(is.na(Meth_em_index)) 
## [1] FALSE
md.pattern(Meth_em_index)                #生成缺失报告
##      country Region IncomeGroup SpecialNotes TableName  
## [1,]       1      1           1            1         1 0
## [2,]       0      0           0            0         0 0
a<-Meth_em_index$Region[6]               #删除数据中所含有的空格项
b<-Meth_em_index$IncomeGroup[6]
Meth_em_index$Region[Meth_em_index$Region==a]=NA
Meth_em_index$IncomeGroup[Meth_em_index$IncomeGroup==b]=NA
Meth_em_data<-Meth_em_data[,c(-3,-4)]
Meth_em_index<-Meth_em_index[,c(-4,-5)]
colnames(Meth_em_data)[2] <- 'country'
#进行表连接
Meth_em<-merge(x = Meth_em_index, y = Meth_em_data, by = "country", all = TRUE)
Meth_em<-Meth_em[,c(-5:-14,-58:-63)]
Meth_em<-na.omit(Meth_em)                #删除含有空值的记录
#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(Meth_em) <- gsub("X", "", names(Meth_em))  
Meth_em_tidy <- 
  Meth_em %>%                            #利用管道操作符
  melt(id = c("country", "Region","IncomeGroup","Country.Name"),     
       variable.name = "year", 
       value.name = "cases",
       na.rm = TRUE)                     #控制四列变量在新表中不动将甲烷排量形成cases
Meth_em_tidy <- tbl_df(Meth_em_tidy)     #处理成tbl_df的更加友好的数据框
Meth_em_gif<-
  Meth_em_tidy[,c(2,5,6)] %>%            #挑选数据分析的列
  dplyr::group_by(Region,year) %>%
  dplyr::summarise(cases = sum(cases))   
#按每个大洲和年份进行分组,并进行甲烷排放量的分组求和
#生成各大洲甲烷排放量年份动图gif
saveGIF({
#设置gif的参数,0.1间隔,convert启动ImageMagick中hp2xx.exe的gif转换器
ani.options(interval=.1,convert =      
              shQuote('D:/bigdatahw/可视化/ImageMagick-7.0.7-Q16/hp2xx.exe'))
#利用for循环抽取1970—2012年中各大洲的甲烷排放量
  for(i in 1970:2012){
   year_data<-dplyr::filter(Meth_em_gif,year==i)  #筛选规定年份的甲烷排量
   year_data$Region = factor(year_data$Region, 
                             levels=c('East Asia & Pacific',
                                      'Europe & Central Asia',
                                      'North America','South Asia',
                                      'Latin America & Caribbean',
                                      'Sub-Saharan Africa',
                                      'Middle East & North Africa')) #对柱状图设定顺序
   p<-ggplot(year_data,aes(x=Region,y=cases,fill=Region, group = factor(1)))+
     geom_bar(stat = "identity", width = 0.5)   #绘制每一年份单幅的ggplot图
   title<-as.character(i)
   p + theme_economist(base_size = 14) +        #使用经济学人主题
     theme(axis.ticks.length=unit(0.4,'cm'))+
     guides(fill=guide_legend(title=NULL))+
     theme(axis.title = element_blank())+
     xlab("大洲名称") + ylab("甲烷排放总量")+
     ggtitle(paste0('各大洲甲烷排放量,',title))+   #设置每次输出的标题
     theme(plot.title = 
             element_text(hjust = 0.5,family="myFont",size=26,color="blue")) 
  print(p)   #将每次ggplot生成的图打印出来
  }
},movie.name = '甲烷排放时序变化柱状图.gif',                
outdir="D:/bigdatahw/可视化/",ani.width=700,ani.height=600) #outdir设置gif输出路径
各大洲甲烷排放量年份动图

各大洲甲烷排放量年份动图

图3-5 2012年各大洲甲烷排放量小提琴图

theme_opts <- list(theme(panel.grid.minor = element_blank(),#设置网格线为空
                         panel.grid.major = element_blank(),#你可以去掉
                         panel.background = 
                         element_rect(fill="aliceblue",color='black'),
                         #设置图版背景色
                         plot.background = element_rect(fill="ivory1"),
                         #设置绘图区背景色
                         panel.border = element_blank(),
                         legend.background = element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
                         axis.line = element_blank(),
                         axis.text.x = element_blank(),
                         axis.text.y = element_blank(),
                         axis.ticks = element_blank(),
                         axis.title.x = element_blank(),
                         axis.title.y = element_blank(),#以上全是设置xy轴
                         plot.title = element_text(size=20,hjust = 0.5,family="myFont",color="navyblue")))

Meth2012<-dplyr::filter(Meth_em_tidy,year==2012)         #筛选2012年甲烷排放数据
ggplot(Meth2012,aes(x=Region,y=log(cases),fill=Region))+
  geom_violin(trim= FALSE,alpha=.35)+
  geom_boxplot(width=.1,fill="black",outlier.colour=NA)+
  geom_jitter()+theme_bw()+
  labs(x="大洲名称",y="log(排放量)",fill="大洲名称图例",title='各大洲甲烷排放量小提琴图')+theme_opts

图3-6 各大洲2014年NO排放总量交互式密度分布图

NO2012<-dplyr::filter(Meth_em_tidy,year==2012)
#绘制分布分面统计图
p<-ggplot(data=NO2012,aes(x=log(cases),fill=Region))+
  geom_density(alpha=.75,colour="white")+
  facet_grid(Region~.)+
  theme_opts+labs(x="大洲名称",y="log(NO排放量)",fill="大洲名称图例",title='各大洲NO排放量交互式分布图')   #由于数据分部差距较大故进行log对数化
ggplotly(p)
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`

图3-7 2014年国家间温室气体污染状况聚类图

gas_em<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/温室气体排放趋势.csv",header=T,sep=',')
names(gas_em) <- gsub("X", "", names(gas_em))         #去掉标题中的X
gas_em<-gas_em[-216:-227,c(2,4,8,12)]                 #选取用作分析的变量
names(gas_em)<-c('CO2','Methane','Nitrous','other')   #标记标题四种气体
a<-gas_em$CO2[5]
gas_em$CO2[gas_em$CO2==a]=NA
gas_em<-na.exclude(gas_em)                            #删除有缺失值的行
gas_em<-data.frame(gas_em)
gas_em$CO2<-as.numeric(gas_em$CO2)                    #进行数值变量转换
gas_em$Methane<-as.numeric(gas_em$Methane)            
gas_em$Nitrous<-as.numeric(gas_em$Nitrous)
gas_em$other<-as.numeric(gas_em$other)
gas_em<-scale(gas_em)                                 #标准化处理
obsnum<-rownames(gas_em)
n<-sample(obsnum,50)
gas_em=gas_em[n,]
dis1<-dist(gas_em,method="euclidean")                  #聚类距离采取欧式距离
dis1<-as.matrix(dis1)
heatmap.2(dis1,main="国家间的污染状况聚类",scale="column")#美化热力图,绘制距离直方图

3.2 森林破坏可视化分析

图3-8 森林覆盖面积地图

world <- map_data("world")
world <- world[world$region != "Antarctica",] # 剔除南极洲
forestdata<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/海洋森林.csv",header=T,sep=',')
forestdata<-forestdata[c(-1:-3,-218:-230),c(1,3,6)]
names(forestdata) <- c('country','forest','threatened') 
colnames(world)[5] <- 'country'
world<-world[,-6]
#将数据表forest_map与world表利用country键相连接
forest_map<-join(world,forestdata,type="full",by="country") 
#补齐两个表中填补国家名称不相同而无法识别的记录
forest_map$threatened[forest_map$country=='Russia']=35         
forest_map$threatened[forest_map$country=='UK']=5
forest_map$threatened[forest_map$country=='USA']=35 
forest_map$threatened[forest_map$country=='Yemen']=9
forest_map$threatened[forest_map$country=='Democratic Republic of the Congo']=15
forest_map$threatened[forest_map$country=='Egypt']=19
forest_map$threatened[forest_map$country=='South Korea']=11
forest_map$threatened[forest_map$country=='North Korea']=10
forest_map$threatened[forest_map$country=='Taiwan']=10
forest_map$threatened[forest_map$country=='Vietnam']=5
forest_map$threatened[forest_map$country=='Venezuela']=36
forest_map$threatened[forest_map$country=='Virgin Islands']=11
forest_map$threatened[forest_map$country=='Republic of Congo']=23
forest_map$threatened[forest_map$country=='Ivory Coast']=39
forest_map<-na.exclude(forest_map)
#转换为数字数据类型
forest_map$threatened<-as.numeric(as.character(forest_map$threatened))
p<-ggplot ()+
  geom_polygon(data=forest_map,aes(x=long,y=lat,group=group,fill=threatened),colour="gray40")+scale_fill_gradient(name="森林面积",low="white",high="green")+
  labs(title ="2015年度各国森林面积")+theme_opts